import * as qiniu from 'qiniu-js'
import TcVod from 'vod-js-sdk-v6'
import {
  message
} from 'ant-design-vue'

// 上传 腾讯云点播
const btnUpload3 = function (getSig, mediaFile) {
  return new Promise((resolve, reject) => {
    const tcVod = new TcVod({
      getSignature: function getSignature () {
        return getSig
      }
    })
    const uploader = tcVod.upload({
      mediaFile: mediaFile // 媒体文件（视频或音频或图片），类型为 File
    })
    uploader.on('media_progress', function (info) {
      //  console.log(info.percent) // 进度
    })
    uploader.done().then(function (doneResult) {
      message.success('上传成功')
      resolve({
        url: doneResult.video.url,
        id: doneResult.fileId
      })
    }).catch(function () {
      reject(new Error('上传失败'))
    })
  })
}

// 随机生成文件名
// 用法 uuid(16, 16)

const uuid = function (len, radix) {
  const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('')
  const uuid = []
  let i
  radix = radix || chars.length
  if (len) {
    for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix]
  } else {
    let r
    uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
    uuid[14] = '4'
    for (i = 0; i < 36; i++) {
      if (!uuid[i]) {
        r = 0 | Math.random() * 16
        uuid[i] = chars[(i === 19) ? (r & 0x3) | 0x8 : r]
      }
    }
  }
  return uuid.join('')
}

// 提取文件后缀
// 用法 extname(file.name)

const extname = function (filename) {
  if (!filename || typeof filename !== 'string') {
    return false
  }
  const a = filename.split('').reverse().join('')
  const b = a.substring(0, a.search(/\./)).split('').reverse().join('')
  return b
}

// 获取当前时间

const getTime = function () {
  Date.prototype.Format = function (fmt) {
    const o = {
      'M+': this.getMonth() + 1, // 月份
      'd+': this.getDate(), // 日
      'h+': this.getHours(), // 小时
      'm+': this.getMinutes(), // 分
      's+': this.getSeconds(), // 秒
      'q+': Math.floor((this.getMonth() + 3) / 3), // 季度
      'S': this.getMilliseconds() // 毫秒
    }
    if (/(y+)/.test(fmt)) {
      fmt = fmt.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (const k in o) {
      if (new RegExp('(" + k + ")').test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)))
      }
    }

    return fmt
  }
  return new Date().Format('yyyyMMdd')
  // return new Date().Format("yyyy-MM-dd hh:mm:ss");
}

// 上传
const btnUpload = function (file, key, token) {
  return new Promise((resolve, reject) => {
    const config = {
      useCdnDomain: true, // cdn加速
      region: qiniu.region.z0, // 上传域名区域 不传自动分析
      forceDirect: true
    }
    const putExtra = {
      fname: '', // 文件原文件名
      params: {}, // 用来放置自定义变量
      mimeType: [] // 用来限定上传文件类型，指定null时自动判断文件类型
    }
    const observable = qiniu.upload(file, key, token, putExtra, config)
    observable.subscribe({
      next: () => {
        // 主要用来展示进度
        // console.warn(result);
      },
      error: (err) => {
        // 上传图片失败
        reject(err.message)
        // console.warn(err);
      },
      complete: (res) => {
        // 上传完成
        resolve('https://img.tokenbty.com/' + res.key)
        // resolve(res.key);
        // console.log(res.key);
      }
    })
  })
}

// 文件下载

const fileDownload = function (url, fileType, index) { // 获取图片地址
  var x = new XMLHttpRequest()
  var resourceUrl = url
  x.open('GET', resourceUrl, true)
  x.responseType = 'blob'
  x.onload = function (e) {
    var url = window.URL.createObjectURL(e.target.response)
    var a = document.createElement('a')
    a.href = url
    a.download = fileType === 'video' ? 'video.mp4' : `image${index + 1}.png`
    a.click()
  }
  x.send()
}

// 导出
export {
  btnUpload,
  uuid,
  getTime,
  extname,
  fileDownload,
  btnUpload3
}
